Pinhole Camera Model
本文为在Scratchapixel上学习相机模型时的个人理解。本文不做翻译或搬运工作,只描述个人学习上的理解。
PS: 这一章略过Depth of field(景深)的概念
易混淆概念解读
Camera Parameter |
Description |
Focal Length |
eye到真实film平面的距离,与光圈一道用于计算FOV/AVO。焦距容易和虚拟相机中的虚拟film平面到eye之间的距离混淆,虚拟film平面一般位于近裁剪面 |
Camera Aperture |
光圈定义了真实相机的物理维度,与焦距一道用于计算FOV/AVO。同时光圈的两个维度也定义了film gate aspect ratio大小。Wiki中列举了大多数常见的film参数。 |
Clipping Planes |
远近裁剪面是虚拟的平面,其位于摄像机的视锥体中,只有在远近裁剪面中的对象才会被渲染。由于画布经常与近裁剪面放置在一起,因此要提防与Focal Length概念混淆。 |
Image Size |
输出图像的尺寸/像素,图像尺寸定义了resolution gate aspect ratio。 |
由以上的这些概念可以推导计算出下面这些变量的值
Variable |
Decription |
Angle of View |
由Focal Length与Film Size(Camera Aperture)计算得到 |
Canvas/Screen Window |
其宽高比例与真实光圈定义得到的film gate aspect ratio一致,可以根据Canvas Size以及光圈快门宽高比例计算得到 |
Film Gate Aspect Ratio |
film heightfilm width,这里film为真实相机的胶卷尺寸 |
Resolution Gate Aspect Ratio |
image heightimage width,这里image为输出的像素宽高比图像的 |
光圈(Aperature):本质上,在平红相机模型中,光圈就是暗室上的那个小洞。但是在现实生活中光圈(pin hole camera model)有一系列的问题。
首先,较大的光圈将会产生模糊的图像(在物体上的同一个位置反射的光子有较大概率在背景布上重叠),但可以大大增大进光量减少曝光时间(曝光时间越长,那么拍摄非静止物体就会模糊)。
然而,为了得到一个边缘清晰锐利可辨的图像,减小光圈直径又是必要的,但这也要求曝光时间增加来提高画面亮度,这也提高了画面模糊的概率。
上述概念可由下两动图解释
为了解决曝光时间和边缘锋利的矛盾,人们将平红相机的洞替换为了凸透镜
。如图所示,更大的光圈可以带来更佳的进光量,减少曝光时间,同时,他也可以将一定距离内的物体上反射的光重新在背景布上汇聚(不同的焦距将会带来不同的景深)。
景深表示在场景中,可见的最远的物体和最近的物体之间的距离(边缘锋利可辨)。因此平红相机的景深为无限大,因为他只是简单的讲光路重现在背景布上,不存在透镜相机的光路汇集的情况。
视角(Angle of View/AOV, Field of View/FOV):视角与两个参数息息相关,底片尺寸与焦距。也就是说改变两者中的任何一个都会引起视角的变化。
> 相同的焦距不同的底片大小将会导致最终图像的内容变少
同样的若想要在不同的底片大小上获得一致的内容,那么就要适当的调整焦距大小,这也就带来清晰度的影响。因为底片越大,相同的内容展示的也就越清晰。
同时这三个参数都是互相衔接的,也就是只要知道三者中的任何两个,就可以计算出剩下一个参数的大小。当然数字相机拍摄的画面已经不再受到底片的大小的影响了(传感器大小)。
胶片框比例(File Gate Radio)与图像分辨率比例(Resolution Gate Ratio):这两者是很有可能不一致的,那么这时候你使用的相机就是变形镜头。
两者比例不同时,你可能面临画面选择的问题。因此Maya给出两个选项:过扫描(Oversan)和填充(Fill)如下图。
基本未知量推导
相机原点就可以理解为Eye所在位置
tan(2θH)==BAFocal Length2(Film Aperture Width∗25.4).
θ是FOV(视角/视野),可以通过arctan(BA)求解显示得到。
CanvasSize也就是所谓的近裁剪面,因此近裁剪面的位置不同,画布的大小也会随之改变。当近裁剪面位于z=0位置时,相应计算而来的CanvasSize=0
tan(2θH)=BA=Znear2Canvas Width,2Canvas Width=tan(2θH)∗Znear,Canvas Width=2∗tan(2θH)∗Znear.
只要得到Canvas Size就可以通过aspect ratio以及简单的坐标变换得到[left, top, right, bottom]各自的值。
right=Focal Length2(Film Aperture Width∗25.4)∗Znear.
top=Focal Length2(Film Aperture Height∗25.4)∗Znear.
PBRT中的相机坐标系变换
- Camera Space: 以相机的origin作为坐标轴的中心,z轴作为视线方向,y轴作为抬头方向(up direction),用于判断一个物体是否对于相机本身是否可见会非常的方便。
- Screen Space: 屏幕空间本身是在图像面板上定义出的,尽管被称之为屏幕空间,但z值依然是有意义的(相关于远近裁剪面,其范围为[0,1])。
- Normalized device coordinate(NDC) space : 这是一个真实图像被渲染的坐标系,xy的范围都在[0,1]之间,z值和屏幕空间坐标系一样有效,本质上也就是屏幕空间线性转换而来。
- Raster Space: 本质上他和NDC Space并没有太大的差别,唯独的区别就是他的xy范围在[0,xResolution]和[0,yResolution]